package day17.myanno.practice;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @author Xiao
 * @date 2021/8/12
 */
public class TestDemo {
    /**
     * 自定义注解练习
     * 需求：自定义一个注解（@Test），用于指定类的方法上，如果某一个类的方法上使用了该注解，就执行该方法。
     *
     * 这是一个测试类
     */
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        Class clazz = UseTest.class;
        Constructor constructor = clazz.getConstructor();
        UseTest useTest = (UseTest) constructor.newInstance();
        Method[] methods = clazz.getMethods();
        for (Method method : methods) {
            //boolean	isAnnotationPresent(类<? extends Annotation>annotationClass)
            //如果此元素上 存在指定类型的注释，则返回true，否则返回false。
            if (method.isAnnotationPresent(Test01.class)) {
                method.invoke(useTest);
            }
        }
    }
}
